/**
 * @file    pc_comm_fifo.c
 * @brief   PC通信FIFO处理服务
 * @details This is the detail description.
 * @author  wang-haoyu
 * @date    2025年7月29日 (created)
 * @version 0.0.2
 * @par Copyright (C):
 *          All Rights Reserved.
 * @par Encoding:
 *          GB2312
 * @par Description        :
 * 1. Hardware Descriptions:
 *      None.
 * 2. Program Architecture:
 *      None.
 * 3. File Usage:
 *      None.
 * 4. Limitations:
 *      None.
 * 5. Else:
 *      None.
 * @par Modification:
 * -# Date          : 2025年7月29日;
 * Revision         : 0.0.1;
 * Author           : wang-haoyu;
 * Contents         : first update
 */
 
/* =============================================================================
 *                                header files
 * ========================================================================== */
#include "pc_comm_fifo.h"

/* =============================================================================
 *                              macros & constants
 * ========================================================================== */

/* =============================================================================
 *                          data structure definitions
 * ========================================================================== */
pccomm_fifo_operat_t pccomm_fifo_operat = PCCOMM_FIFO_INITALIZER;
/* =============================================================================
 *                         static variable definitions
 * ========================================================================== */

/* =============================================================================
 *                         static function definitions
 * ========================================================================== */

/* =============================================================================
 *                         global function definitions
 * ========================================================================== */

/*
 * PC通信数据帧创建函数
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		-PCCOMM_FIFO_ENOERR_CODE：返回状态
 */
PCCOMM_FIFO_ENOERR_CODE pc_comm_fifo_creat(pccomm_fifo_port_t *obj)
{
    obj->fifo = pccomm_fifo_operat.pccomm_fifo_creat(obj->fifo_name,obj->fifo_size,0);
    if(obj->fifo == RT_NULL)
        return E_PCCOMM_EINIT;

    pccomm_fifo_operat.pccomm_fifo_clean(obj->fifo);

    return E_PCCOMM_ENOERR;
}

/*
 * PC通信数据帧销毁函数
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		-PCCOMM_FIFO_ENOERR_CODE：返回状态
 */
PCCOMM_FIFO_ENOERR_CODE pc_comm_fifo_release(pccomm_fifo_port_t *obj)
{
    pccomm_fifo_operat.pccomm_fifo_destroy(obj->fifo);
    return E_PCCOMM_ENOERR;
}

/*
 * PC通信数据帧写入函数
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		-PCCOMM_FIFO_ENOERR_CODE：返回状态
 */
PCCOMM_FIFO_ENOERR_CODE pc_comm_fifo_write(pccomm_fifo_port_t *obj,const void *wbuf,rt_uint32_t size)
{
    pccomm_fifo_operat.pccomm_fifo_write(obj->fifo,wbuf,size);
    return E_PCCOMM_ENOERR;
}

/*
 * PC通信数据帧读取函数
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		-PCCOMM_FIFO_ENOERR_CODE：返回状态
 */
int pc_comm_fifo_read(pccomm_fifo_port_t *obj,void *rbuf,rt_uint32_t size)
{
    return pccomm_fifo_operat.pccomm_fifo_read(obj->fifo,rbuf,size);
}

/*
 * PC通信数据fifo获取使用内存大小函数
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		-fifo使用大小
 */
int pc_comm_fifo_get_used(pccomm_fifo_port_t *obj)
{
    return pccomm_fifo_operat.pccomm_fifo_get_used(obj->fifo);
}

/*
 * PC通信数据fifo内存清空
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *   Output:
 * Returns:
 *		返回状态
 */
void pc_comm_fifo_clean(pccomm_fifo_port_t *obj)
{
	return pccomm_fifo_operat.pccomm_fifo_clean(obj->fifo);
}

/*
 * PC通信数据fifo内存数据裁剪
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *		-size:数据长度
 *   Output:
 * Returns:
 *		返回状态
 */
int pc_comm_fifo_cut(pccomm_fifo_port_t *obj,rt_uint32_t size)
{
	return pccomm_fifo_operat.pccomm_fifo_cut(obj->fifo,size);
}

/*
 * PC通信数据fifo内存数据读取指定长度
 *
 * Parameter:
 *   Input:
 *		-*obj：fifo接口句柄
 *		-*rbuf:数据存放buf
 *		-size:数据长度
 *   Output:
 * Returns:
 *		返回状态
 */
int pc_comm_fifo_pick(pccomm_fifo_port_t *obj,rt_uint8_t *rbuf,rt_uint32_t size)
{
	return pccomm_fifo_operat.pccomm_fifo_pick(obj->fifo,rbuf,size);
}
/*******************************************************************************
 *                                  EOF
 ******************************************************************************/
